// exam501stat.c中只对目录文件和普通文件进行了判断
// 该案例中给出了更多类型文件判断的实例，在该实例中使用了lstat函数来代替stat函数获得文件的属性
// 对于符号链接文件而言，lstat函数返回的是该符号链接的信息而不是该符号链接引用的文件信息
// 所以如果当Linux的文件系统目录进行操作时必须使用lstat命令而不是stat命令
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/stat.h>

int main(int argc, char *argv[]){
	
	int i;
	struct stat buf;	// 文件属性存放缓冲区
	char *ptr;

	for(i=1;i<argc;i++){
		// 首先打印输出文件名
		printf("%s是一个：",argv[i]);


		// 使用lstat函数获取文件属性
		if(lstat(argv[i], &buf) == -1){
			printf("获取文件属性失败!\n");
			// 仅退出当前循环
			continue;	
		}
	
		// 使用if循环判断文件类型
		if(S_ISREG(buf.st_mode)){
			ptr = "普通文件";
		}else if(S_ISDIR(buf.st_mode)){
			ptr = "目录文件";
		}else if(S_ISCHR(buf.st_mode)){
			ptr = "字符设备文件";
		}else if(S_ISBLK(buf.st_mode)){
			ptr = "块设备文件";
		}else if(S_ISFIFO(buf.st_mode)){
	
			ptr = "FIFO";
		}else if(S_ISLNK(buf.st_mode)){
			ptr = "符号链接";
		}else if(S_ISSOCK(buf.st_mode)){
			ptr = "套接字文件";
		}else {
			ptr = "未知文件类型";
		}
		
		printf("%s\n",ptr);
	}
	return 0;

}


